var arr = [1, 2, 3, 4, 9, 5]
// 反转数组项的排序
var rev = arr.reverse()
console.log('rev', rev) // rev (6) [5, 9, 4, 3, 2, 1]
// 看下有没有改变原数组  改变了原数组。
console.log('arr', arr) // arr (6) [5, 9, 4, 3, 2, 1]

var array = [1, 2, 3, 4, 29, 5]
// sort排序 说明sort方法也会改变原数组
var sor = array.sort()
console.log('sor', sor) // sor (6) [1, 2, 29, 3, 4, 5]
console.log('array', array) // array (6) [1, 2, 29, 3, 4, 5]
// 因为sort在做比较的时候，会调用每个项的toString()方法，其实相当于调用String()方法，
//因为对于null来说，没有toString()方法 然后将比较字符串的编码来作为自己排序的标准

// sort方法可以接受一个比较函数作为参数，以便我们指定哪个值位于哪个值的前面
function compare (a, b) {
  console.log(typeof a) // number
  return a - b
}
var sort = sor.sort(compare)
console.log('sort', sort)  // [1, 2, 3, 4, 5, 29]  如果要返回降序排列，将a与b的位置调换即可

var obj = {
  toString: function () {
    return 'a'
  }
}
var arrItem = new Array(3)
var typeArray = [null, true, false, obj, arrItem]
typeArray.forEach(function(item) {
  console.log('itemToString', String(item))
})
/*
itemToString null
javascript.js:32 itemToString true
javascript.js:32 itemToString false
javascript.js:32 itemToString a
javascript.js:32 itemToString  ,,
*/
// typeArray (5) [Array(3), {…}, false, null, true] // 转化为字符串后，是这么个顺序
console.log('typeArray', typeArray.sort())
console.log('comparetypeArray', typeArray.sort(compare)) // 这种的排序加比较函数似乎没意义


// 栈方法：后进先出 push pop
/**
 * 1.该操作改变原数组
 * 2.push操作返回最终数组的length
 * 3.pop操作返回被pop的项
 */
var zhanArray = [1, 3, 5]
var push = zhanArray.push('push')
console.log('push', push) // 4
console.log('zhanArray', zhanArray) // [1, 3, 5, "push"]
var pop = zhanArray.pop()
console.log('pop', pop) // push 返回了被pop的项
console.log('zhanArary', zhanArray) // 并且改变了原数组 [1, 3, 5]

// 队列方法 先进先出 push shift
/**
 * 1.该操作改变原数组
 * 2.push操作返回最终数组的length
 * 3.shift操作返回被shift的项
 */
var duilieArray = [1, 2, 3]
var push = duilieArray.push(4)
// push 会改变原数组，并且返回最终数组的长度
console.log('duilieArray', duilieArray) // duilieArray (4) [1, 2, 3, 4]
console.log('push', push) // 4
var shift = duilieArray.shift()
// shift操作也会改变原数组。返回被shift的项
console.log('duilieArray', duilieArray) // [2, 3, 4]
console.log('shift', shift) // 1
